#include <bits/stdc++.h>

using namespace std;

typedef unordered_map<string, string> stringmap;

stringmap merge(stringmap a, stringmap b) // 合并两个无序map
{ 	
	// 直接使用insert函数
	stringmap temp(a);
	temp.insert(b.begin(), b.end()); // a中存在的key不会被覆盖

	return temp;
}

int main(void)
{
	/* 无序map，默认hash函数 */
	stringmap m1; // 默认构造函数
	m1["a"] = "1";
	m1["b"] = "2";
	m1["c"] = "3";
	m1["d"] = "4";
	m1["e"] = "5";
	stringmap m2(m1.begin(), m1.end()); // 迭代器构造函数
	stringmap m3(m1); // 拷贝构造函数
	stringmap m4({ {"a", "3"}, {"d", "2"}, {"f", "3"}, {"g", "4"} }); // 初始化列表构造函数
	stringmap m5 = merge(m1, m4); // 合并两个无序map
	// 迭代器
	for (auto it = m1.begin(); it != m1.end(); ++it) {
		cout << it->first << " " << it->second << endl;
	}

	cout << "------------------------" << endl;

	for (auto it = m5.begin(); it != m5.end(); ++it) {
		cout << it->first << " " << it->second << endl;
	}

	return 0;
}
